opens:	7F082BD0 - 7F082C20	20 ops
	7F0693F4 - 7F06942C	14 ops

stow weapon # in slot.
on addition:
	if -1, skip ammo and weapon additions
	if 0, default to 0x20
	stow type in stack between writes
	retrieve player's ammo of type and save to object
	add to player ammo for type given

on removal:
	to eliminate possible glitches, if -1, skip all ammo and weapon stuff
	if 0, default to 0x20
	retrieve amount of ammo
	retrieve ammo on clip
	save 0 over both ammo slots
	subtract saved player ammo from retrieved
		if > 0, save difference to object
	remove weapon #
	fry player ammo

revision:
	0xB4	2	SE idle
	0xB6	2	SE moving
	0xB8	2	SE crush
	0xBA	1	weapon type (0=default, -1=none)
	0xBB	1	reserved (runtime weapon replace flag)
	0xBC	2	upper half of max speed float
	0xBE	2	upper half of accel/decel step
	0xC0	4	reserved
	0xC7	1	firing effect register
	0xD8	2	player's ammo
	0xDA	2	vehicle's ammo

+_+

revised ASM
tank firing effect to 1 byte (cleaner code)
//7F04919C:	7DCCC
LW	T0,00C4 (S1)	->	LB	T0,00C7 (S1)
//7F0864DC:	BB00C
SW	A0,00C4 (S0)	->	SB	A0,00C7 (S0)
//7F0864EC:	BB01C
SW	A0,00C4 (S0)	->	SB	A0,00C7 (S0)


*_*

revised ASM

Convert weird weapon values
0x39344	7F004814	expand 2D object type
13C000B9	BEQ	S8,R0,0x3962C
8E4D000C	LW	T5,000C (S2)	;upper 32 bitflags
01B46024	AND	T4,T5,S4	;& with killflags from generic caller
158000B6	BNEZ	T4,0x3962C	;skip object if killflags present!
824400BA	*LB	A0,00BA (S2)	;A0=weapon type
50800001	*BEQL	A0,R0,+1
24040020	ADDIU	A0,R0,0020	;A0=20	tank
A24400BA	*SB	A0,00BA (S2)

Figure current player's ammo
Draw player ammo from tank.
if(cur-player <= 0) set value to 0
save the difference (or 0) to tank's register
//7F0829D8:	B7508
3C0C8003	*LUI	T4,8003
8D8D6448	*LW	T5,6448 (T4)
24010001	ADDIU	AT,R0,0001
15A10034	BNE	T5,AT,7F082AA4
//7F0829F0:	B7520	bail from the tank; copies ammo back to tank object
8D8C6450	LW	T4,6450 (T4)	;T4=80036450: p->obj position entry (8006 table)
8D8C0004	LW	T4,0004 (T4)	;T8=obj pos entry+4: p->object f/ setup
818400BA	*LB	A0,00BA (T4)	;A0=weapon
04800016	+BLEZ	A0,+16+5	;skip it all if the weapon isn't there!
A18000C7	*SB	R0,00C7 (T4)	;0->tank+C4: FIRING EFFECT OFF
//7F082A04:	fry player's tank item
818100BB	*LB	AT,00BB (T4)	;A0=weapon
1020000A	+BEQ	AT,R0,+A	;skip weapon stuff if you had one before tank
AFAC00F4	SW	T4,00F4 (SP)	;SP+F4=p->object
0FC23187	JAL	7F08C61C	;probably removes tank item from inventory...	(T4 safe)
00000000	+NOP
//7F082A18:	if tank, cycle weapons
0FC17674	JAL	7F05D9D0	;ret V0=right hand weapon	(T4 safe)
00002025	+OR	A0,R0,R0	;A0=0	right hand
818400BA	*LB	A0,00BA (T4)	;A0=weapon
14440003	*BNE	V0,A0,+3	;branch if not tank
00000000	+NOP
0FC17600	JAL	7F05D800	;cycle weapon	(fries T4)
00000000	+NOP
//7F082A2C:	fry player's tank ammo
8FAC00F4	LW	T4,00F4 (SP)	;SP+F4=p->object
818400BA	+LB	A0,00BA (T4)	;A0=weapon
0FC1A4FD	+JAL	7F0693F4	;ret V0=ammo on clip if types match
00002825	+OR	A1,R0,R0	;right hand
00405825	+OR	T3,V0,R0	;T3=clip ammo
;these four lines added for left clip support
818400BA	++LB	A0,00BA (T4)	;A0=weapon type
0FC1A4FD	++JAL	7F0693F4	;ret V0=ammo on clip
24050001	++ADDIU	A1,R0,0001	;left hand
004B5821	++ADDU	T3,V0,T3
0FC1A514	JAL	7F069450	;ret V0= cur. amount of tank ammo in inventory	(T4 safe)
818400BA	LB	A0,00BA (T4)	;A0=weapon
004B5821	+ADDU	T3,V0,T3	;T3=stock + clip when applicable
;original
;8FAC00F4	LW	T4,00F4 (SP)	;SP+F4=p->object
;0FC1A514	JAL	7F069450	;ret V0= cur. amount of tank ammo in inventory	(T4 safe)
;818400BA	*LB	A0,00BA (T4)	;A0=weapon
958500D8	*LHU	A1,00D8 (T4)	;A1=original ammo on entry, extended for clip
00AB5823	+SUBU	T3,A1,T3	;V0=original-current	dif is actual difference in ammo!
;added following two lines
958500DA	+LHU	A1,00DA (T4)	;A1=tank's stock
00AB5823	+SUBU	T3,A1,T3	;T3=stock - difference
59600001	+BLEZL	T3,+1		;no need to edit ammo if you chewed up all theirs!
00005825	+OR	T3,R0,R0	;if<0, set to zero so math works
;added following line
004B2823	SUBU	A1,V0,T3	;removes stock from ammo total
0FC1A521	JAL	7F069484	;Add proper tank ammo to player's inventory	(T4 safe)
A58B00DA	SH	T3,00DA (T4)	;save amount of tank ammo to tank's register
//7F082A6C:	no longer in tank
0FC1F3A8	JAL	7F07CEA0	;NEW!  sets tank not occupied
2403000C	ADDIU	V1,R0,000C
00001025	OR	V0,R0,R0
8E180000	LW	T8,0000 (S0)
E714016C	SWC1	F20,016C (T8)
E7140174	SWC1	F20,0174 (T8)
E714014C	SWC1	F20,014C (T8)
//7F082A80:
03027021	ADDU	T6,T8,V0	;T6=T8+offset
24420004	ADDIU	V0,V0,0004	;V0+=4
1443FFFC	BNE	V0,V1,7F082A80	;branch V0<0xC
E5D40180	SWC1	F20,0180 (T6)	;F20->T6+0x180
240F0002	ADDIU	T7,R0,0002
1000006A	BEQ	R0,R0,7F082C2C
AF0F009C	SW	T7,009C (T8)	;2->T9+0x9C
//7F082AA4:
00000000	NOP
00000000	NOP
00000000	+NOP
00000000	+NOP
00000000	+NOP
00000000	+NOP
00000000	+NOP


to make myself look like less of an idiot, use 7F069258: V0= total ammo of type A0, including in weapon clips
exit
//7F082A2C:	fry player's tank ammo
8FAC00F4	LW	T4,00F4 (SP)	;SP+F4=p->object
0FC1A50B	+JAL	7F06942C	;ret V0=ammo type of weapon A0
818400BA	+LB	A0,00BA (T4)	;A0=weapon
0FC1A496	+JAL	7F069258	;ret V0=total ammo of type A0
00402025	+OR	A0,V0,R0
00405825	+OR	T3,V0,R0	;T3=total ammo
0FC1A4FD	NOP
24050001	NOP
004B5821	NOP
004B5821	NOP
0FC1A514	JAL	7F069450	;ret V0= cur. amount of tank ammo in inventory	(T4 safe)
818400BA	LB	A0,00BA (T4)	;A0=weapon
958500D8	*LHU	A1,00D8 (T4)	;A1=original ammo on entry, extended for clip
01655823	+SUBU	T3,T3,A1	;V0=current-original	dif is actual difference in ammo!
;added following two lines
958500DA	NOP
00AB5823	NOP
59600001	+BLEZL	T3,+1		;no need to edit ammo if you chewed up all theirs!
00005825	+OR	T3,R0,R0	;if<0, set to zero so math works
;added following line
004B2823	SUBU	A1,V0,T3	;removes stock from ammo total
0FC1A521	JAL	7F069484	;Add proper tank ammo to player's inventory	(T4 safe)
A58B00DA	SH	T3,00DA (T4)	;save amount of tank ammo to tank's register

intro
//7F082ADC	new alternate	A0 retrains weapon type
0FC1A50B	+JAL	7F06942C	;ret V0=ammo type of weapon A0
818400BA	+LB	A0,00BA (T4)	;A0=weapon
0FC1A496	+JAL	7F069258	;ret V0=total ammo of type A0
00402025	+OR	A0,V0,R0
0FC1A4FD	NOP
24050001	NOP
004B5821	NOP
A58200D8	+SH	V0,00D8 (T4)	;save current ammo
0FC1A514	+JAL	7F069450	;ammo in inventory
818400BA	LB	A0,00BA (T4)	;A0=weapon type
958500DA	LHU	A1,00DA (T4)	;A1=tank ammo register
//7F082AF0:	add tank ammo as per tank object
0FC1A521	JAL	7F069484	;add A1 ammo of type A0=tank (T4 safe)
00452821	ADDU	A1,V0,A1	;add cur ammo to tank ammo
00AB1021	NOP



insert hook for clip testing...
//7F082A34:	fry player's tank ammo
8FAC00F4	LW	T4,00F4 (SP)	;SP+F4=p->object
818400BA	LB	A0,00BA (T4)	;A0=weapon
0FC1A4FD	+JAL	7F0693F4
00002825	+OR	A1,R0,R0	;right hand
00405825	+OR	T3,V0,R0	;T3=ammo stock
0FC1A514	JAL	7F069450	;ret V0= cur. amount of tank ammo in inventory	(T4 safe)
818400BA	LB	A0,00BA (T4)	;A0=weapon
004B1021	+ADDU	V0,V0,T3	;V0=stock + clip when applicable
958500D8	LHU	A1,00D8 (T4)	;A1=original ammo on entry
00451023	SUBU	V0,V0,A1	;V0=current-original
58400002	BLEZL	V0,+2		;no need to edit ammo if you chewed up all theirs!
00001025	OR	V0,R0,R0	;if<0, set to zero so math works
0FC1A521	JAL	7F069484	;Add proper tank ammo to player's inventory	(T4 safe)
A58200DA	SH	V0,00DA (T4)	;save amount of tank ammo to tank's register

same hook, for entering tank
0FC1A4FD	+JAL	7F0693F4
00002825	+OR	A1,R0,R0	;right hand
00405825	*OR	T3,V0,R0	;T3=ammo stock
0FC1A514	-JAL	7F069450	;returns V0=ammo for weapon A0	(T4 safe)
818400BA	LB	A0,00BA (T4)	;A0=weapon type
958500DA	LHU	A1,00DA (T4)	;A1=tank ammo register
//7F082AF0:	add tank ammo as per tank object
00452821	ADDU	A1,V0,A1	;add cur ammo to tank ammo
00AB2821	+ADDU	A1,A1,T3	;V0=stock + clip when applicable


adding a routine via rewrite of existing one:
7F07CE84	B19B4	return V0=p->object's 8006 if in tank, T6=state
3C028003	LUI	V0,8003
8C4E6448	LW	T6,6448 (V0)
55C00002	BNEZL	T6,+2
8C426450	LW	V0,6450 (V0)
00001025	OR	V0,R0,R0
03E00008	JR	RA
00000000	NOP

7F07CEA0:	B19D0	0FC1F3A8	set exit tank; fries V0
3C028003	LUI	V0,8003
03E00008	JR	RA
AC406448	SW	R0,6448 (V0)
00000000	NOP



tank's ammo stock value = 2 bytes.  
Upper 2 bytes reserved for runtime player stock total before entering tank
So, it has its own ammo - probably ;*)
//7F082A9C	B75D4	below are called when shoving a player into the tank!	AT already=1, T4=8003, S0=p->curBOND
;8D8C6450	LW	T4,6450 (T4)	;V0=p->current obj being parsed: tank
11800059	*BEQ	T4,R0,7F082C20
3C028003	+LUI	V0,8003
918A0000	LBU	T2,0000 (T4)	;V0=8006+0: 1 when you can crawl on it (0=not there, 2=normal object collisions)
15410056	*BNE	T2,AT,7F082C20	;branch if it isn't whatever they're testing for...
8D8C0004	LW	T4,0004 (T4)	;A1=8006+4: p->tank object
918B0003	LBU	T3,0003 (T4)	;T3=obj+3: object type
2401002D	ADDIU	AT,R0,002D	;AT=2D: tank object type
15610052	*BNE	T3,AT,7F082C20	;skip if object not tank (2D)
8C4D6480	LW	T5,6480 (V0)	;T5=80036480: 1 if on tank turret; T4 already = 8003
11A00050	*BEQ	T5,R0,7F082C20	;skip if not on turret
818400BA	*LB	A0,00BA (T4)	;A0=weapon type
04800011	+BLTZ	A0,+D+4	;skip ammo writting if no item
AFAC00EC	SW	T4,00EC (SP)	;SP+EC= p->tank
//7F082AD0	new alternate
0FC1A4FD	+JAL	7F0693F4	;ret V0=ammo on clip
00002825	+OR	A1,R0,R0	;right hand
00405825	*OR	T3,V0,R0	;T3=ammo on clip stock
;these four lines added for left clip support
818400BA	++LB	A0,00BA (T4)	;A0=weapon type
0FC1A4FD	++JAL	7F0693F4	;ret V0=ammo on clip
24050001	++ADDIU	A1,R0,0001	;left hand
004B5821	++ADDU	T3,V0,T3
0FC1A514	-JAL	7F069450	;returns V0=ammo for weapon A0	(T4 safe)
818400BA	LB	A0,00BA (T4)	;A0=weapon type
958500DA	LHU	A1,00DA (T4)	;A1=tank ammo register
//7F082AF0:	add tank ammo as per tank object
00452821	ADDU	A1,V0,A1	;add cur ammo to tank ammo
00AB1021	+ADDU	V0,A1,T3	;V0=stock + clip when applicable
;0FC1A514	+JAL	7F069450	;returns V0=ammo for weapon A0	(T4 safe)
;00000000	+NOP
;818400BA	*LB	A0,00BA (T4)	;A0=weapon type
;958500DA	*LHU	A1,00DA (T4)	;A1=tank ammo register
//7F082AF0:	add tank ammo as per tank object
;00452821	+ADDU	A1,V0,A1	;add cur ammo to tank ammo
0FC1A521	JAL	7F069484	;add A1 ammo of type A0=tank (T4 safe)
A58200D8	+SH	V0,00D8 (T4)	;save current ammo
//7F082ADC:	add tank to inventory
0FC23122	JAL	7F08C488	;add item A0 to inventory-ret V0=1 if okay, 0 if can't!  0 if already have one, esp.!	(fry T4)
818400BA	*LB	A0,00BA (T4)	;A0=weapon type
//7F082B04:	B763C
8FA300EC	LW	V1,00EC (SP)
0FC20C1A	JAL	7F083068	;set override values
A06200BB	+SB	V0,00BB (V1)	;save sucess byte; can test later for removal
3C018005	-LUI	AT,8005
C42A5120	-LWC1	F10,5120 (AT)
3C018003	-LUI	AT,8003
2424646C	*ADDIU	A0,AT,646C
C46600C8	LWC1	F6,00C8 (V1)
E4860000	SWC1	F6,0000 (A0)
460A3483	*DIV.S	F18,F6,F10
E4326470	SWC1	F18,6470 (AT)
24256474	*ADDIU	A1,AT,6474
//
240C0001	ADDIU	T4,R0,0001
3C193C80	*LUI	T9,3C80
8E080000	LW	T0,0000 (S0)
E514016C	*SWC1	F20,016C (T0)
E5140174	*SWC1	F20,0174 (T0)
E514014C	*SWC1	F20,014C (T0)
AD0C009C	*SW	T4,009C (T0)
C5080148	LWC1	F8,0148 (T0)
C50A0158	LWC1	F10,0158 (T0)
//
3C028008	LUI	V0,8008
AC4099B8	*SW	R0,99B8 (V0)
E45499BC	*SWC1	F20,99BC (V0)
AC5999C0	*SW	T9,99C0 (V0)
E44899C4	*SWC1	F8,99C4 (V0)
E44A99C8	*SWC1	F10,99C8 (V0)
244299D0	ADDIU	V0,V0,99D0	;V0=800799D0
//
C46400CC	LWC1	F4,00CC (V1)
E4246484	SWC1	F4,6484 (AT)
3C018005	LUI	AT,8005
E4A40000	*SWC1	F4,0000 (A1)
C42A5124	LWC1	F10,5124 (AT)
460A2483	*DIV.S	F18,F4,F10
3C018003	LUI	AT,8003
E4326478	SWC1	F18,6478 (AT)
E434647C	SWC1	F20,647C (AT)
C46400DC	LWC1	F4,00DC (V1)
E4246464	SWC1	F4,6464 (AT)
E4346460	SWC1	F20,6460 (AT)
AC2C6448	SW	T4,6448 (AT)
//7F082BC8:
C512048C	LWC1	F18,048C (T0)
E4520000	SWC1	F18,0000 (V0)
C5040490	LWC1	F4,0490 (T0)
E4440004	SWC1	F4,0004 (V0)
C5060494	LWC1	F6,0494 (T0)
E4460008	SWC1	F6,0008 (V0)
0FC1F1ED	JAL	7F07C7B4
AC206490	SW	R0,6490 (AT)
10000017	BEQ	R0,R0,7F082C30
8FAC0144	LW	T4,0144 (SP)
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP


00000000	NOP
00000000	NOP
00000000	NOP

dang.  To get this working right, must test if current weapon uses same ammo as the tank's
if the ammo types line up, add in the clip to total.
That assures on entry and exit, if ammo types are the same as the tank's, it will pull the right number

deleted routine below with stupidity revision
7F0693F4	9DF24		0FC1A4FD	NEW!
if ammo types for item in hand A1 and item A0 match, V0=ammo on clip. else, 0
accepts: A0=weapon, A1=hand
fries:	AT,V0,V1,A0,A1,T6,T7,T8
AFBFFFE0	SW	RA,FFE0 (SP)
0FC1A50B	JAL	7F06942C	;V0=ammo type for weapon A0; fries V1,T6,T7,T8
00000000	NOP
00A02025	+OR	A0,A1,R0	;A0 now equals hand
0FC17674	JAL	7F05D9D0	;V0=hand A0's weapon; fries T6,T7,T8
00402825	+OR	A1,V0,R0	;A1 now equals ammo type for weapon A0
8F01089C	LW	AT,089C (T8)	;clip ammo for hand A1
0FC1A50B	JAL	7F06942C	;V0=ammo type for weapon A0; fries V1,T6,T7,T8
00402025	+OR	A0,V0,R0
54450001	BNEL	V0,A1,+1
00000825	OR	AT,R0,R0	;fry clip ammo total if they don't match
8FBFFFE0	LW	RA,FFE0 (SP)
03E00008	JR	RA
00201025	OR	V0,AT,R0

REWRITING A ROUTINE TO MAKE ROOM FOR THIS!
7F069374	9DEA4	shotgun shell reloader
	accepts: A0=hand (0-R,1-L)
27BDFFE0	ADDIU	SP,SP,FFE0
AFBF0014	SW	RA,0014 (SP)
0FC17674	JAL	7F05D9D0	;T7 will be the offset to hand
AFA40020	SW	A0,0020 (SP)	;hand->SP+20
00402025	OR	A0,V0,R0	;A0=hand A0's weapon
AFAF0018	SW	T7,0018 (SP)	;offset to hand->SP+18
0FC1A514	JAL	7F069450	;ret V0=ammo stock for weapon A0
AFA2001C	SW	V0,001C (SP)	;weapon->SP+1C
00402825	OR	A1,V0,R0	;A1=ammo stock
8FAE0020	LW	T6,0020 (SP)	;T6=hand
8FA3001C	LW	V1,001C (SP)	;V1=weapon
2401000F	ADDIU	AT,R0,000F
10610002	BEQ	V1,AT,7F0693B0	;branch if weapon = shotgun
24010010	ADDIU	AT,R0,0010
1461000E	BNE	V1,AT,quit	;branch if weapon isn't autoshotgun
//7F0693B0:	shotgun and autoshotgun - test other held weapon
240F0001	ADDIU	T7,R0,0001
0FC17674	JAL	7F05D9D0	;ret V0=other hand's weapon; doesn't touch A1
01EE2023	SUBU	A0,T7,T6	;A0=hand inverted (1-R,0-L)
10410003	BEQ	V0,AT,7F0693D8	;branch if autoshotgun
2401000F	ADDIU	AT,R0,000F
14410007	BNE	V0,AT,quit-1	;branch if not shotgun
00005825	OR	T3,R0,R0
//7F0693D8:	shotgun and autoshotgun...
8FA80018	LW	T0,0018 (SP)	;T9=hand
3C188008	LUI	T8,8008
8F18A0B0	LW	T8,A0B0 (T8)	;T8=p->BONDdata
00084823	SUBU	T1,R0,T0	;T1=negative offset
03095021	ADDU	T2,T8,T1
8D4B0C4C	LW	T3,0C4C (T2)	;T3=BONDdata+0xC4C
00AB1023	SUBU	V0,A1,T3	;V0=ammo stock - value...
//7F06941C:	quit
8FBF0014	LW	RA,0014 (SP)
03E00008	JR	RA
27BD0020	ADDIU	SP,SP,0020
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
00000000	NOP
	
	

//7F083B1C:	B864C	test y sight elevation versus cutoff
3C018008	LUI	AT,8008
C420FF6C	LWC1	F0,FF6C (AT)


potential rewrite...
IF PROBLEMS OCCUR, redo the first C.LT.S test and keep an op between them & branches!
//7F082F20:	B7A50
11400008	BEQ	T2,R0,+8
46001386	MOV.S	F14,F2
8FA90120	LW	T1,0120 (SP)
3C01428C	LUI	AT,428C
44892000	MTC1	T1,F4
44815000	MTC1	AT,F10
//7F082F38:
468024A0	CVT.S.W	F18,F4
10000009	BEQ	R0,R0,+9
460A9003	DIV.S	F0,F18,F10
//7F082F44:
8FAB019C	LW	T3,019C (SP)
11600003	BEQ	T3,R0,+3
8FAD0198	LW	T5,0198 (SP)
10000004	BEQ	R0,R0,+4
46001006	MOV.S	F0,F2
//7F082F58:
3C01BF80	LUI	AT,BF80
55A00003	BNEZL	T5,+1
44810000	MTC1	AT,F0
//7F082F64:
3C01BF80	LUI	AT,BF80
4600103C	C.LT.S	F2,F0
3C0C8005	LUI	T4,8005
45020003	BC1FL	+3
44813000	MTC1	AT,F6
10000005	BEQ	R0,R0,+5
46001006	MOV.S	F0,F2
//7F082F80:	direction
4606003C	C.LT.S	F0,F6
3C01BF80	LUI	AT,BF80
45030001	BC1TL	+1	;if F0<-1, set it to -1
44810000	MTC1	AT,F0		;F0=-1.0
//7F082F90:	max speed
3C018008	LUI	AT,8008
C430FF60	LWC1	F16,FF60 (AT)	;F16=15.0	max speed?
//7F082F98:
...

//7F082FE4:	B7B14	dual de/accel routine!
4602003C	C.LT.S	F0,F2
3C013E80	LUI	AT,3E80
45020002	BC1FL	+2	;branch if speed >= max speed?
46020101	SUB.S	F4,F0,F2	;DECEL value
46001101	SUB.S	F4,F2,F0	;!difference!	F4=MAX-speed!
//7F083014:	tank accel
44819000	MTC1	AT,F18		;F18=0.25
3C018008	LUI	AT,8008
C428FF64	LWC1	F8,FF64 (AT)		;F8=0.5	acceleration step
46122282	MUL.S	F10,F4,F18	;F10=F4/4
45020002	BC1FL	+2	;branch if speed >= max speed?
3C01C120	LUI	AT,C120		;decel = -10
3C014120	LUI	AT,4120		;accel = +10
46105183	DIV.S	F6,F10,F16	;F6=F10/F16	[F16=15.0]
44815000	MTC1	AT,F10		;!difference!	F10=10
3C014270	LUI	AT,4270
46083100	ADD.S	F4,F6,F8	;F4=F8+0.5
44814000	MTC1	AT,F8		;F8=60
3C018005	LUI	AT,8005
460E2482	MUL.S	F18,F4,F14	;F18=F4*F14	[F14=1.0]
C4248378	LWC1	F4,8378 (AT)	;F4=80048378:  1.0	clock cycle rate counter maybe?  multiplier is used in many different animation applications...
460A9182	MUL.S	F6,F18,F10	;F6=F18*10
46083303	DIV.S	F12,F6,F8	;F12=F6/60
46046482	MUL.S	F18,F12,F4	;F18=F12*1.0
46120280	ADD.S	F10,F0,F18	;F10=speed+F18
45020002	BC1FL	+2	;branch if speed >= max speed?
4602503C	C.LT.S	F10,F2
460A103C	C.LT.S	F2,F10
E50A0174	SWC1	F10,0174 (T0)	;F10->player's speed
4500001F	BC1F	7F0830F4	;if max speed < speed, set speed to max
00000000	NOP
1000001D	BEQ	R0,R0,7F0830F4
E5020174	SWC1	F2,0174 (T0)	;max speed -> player's speed
//7F083080:	empty.  safe to commandeer for Tank attribute ripping!  Yar!

//7F085658:	BA188	IGNITION + idle (when looped)
0FC2FF01	JAL	7F0BFC04
3C058008	LUI	A1,8008
14400005	BNEZ	V0,7F085678
3C048006	LUI	A0,8006
8C843720	LW	A0,3720 (A0)
94A5FF78	LHU	A1,FF78 (A1)


//7F085870:	BA3A0	idle SE when non-looping!
24050041	ADDIU	A1,R0,0041	->	3C058008	LUI	A1,8008
02003025	OR	A2,S0,R0
0C002382	JAL	70008E08
E7AC0244	SWC1	F12,0244 (SP)	->	94A5FF7A	LHU	A1,FF7A (A1)

//7F085760:	BA290	motion SE
3C058008	LUI	A1,8008
0C002382	JAL	70008E08
94A5FF7C	LHU	A1,FF7C (A1)


//7F0867E0:	BB310	crush SE (as opposed to scream, which won't change)
1020000D	BEQ	AT,R0,7F086818
...
//7F086818:	BB348
3C058008	LUI	A1,8008
	BLEZ	V0,7F086840
	LUI	A0,8006
	LW	A0,3720 (A0)
94A5FF7E	LHU	A1,FF7E (A1)
	JAL	70008E08
	OR	A2,R0,R0
	

technically, can get rid of 7F0830F4 and use branches to 7F083390 instead
however, it would be tedious to recalc all the branches to 30F4...
7F08307C	B7BAC	1D+A7	C4
7F083074	B7BA4	1F+A7	C6
7F082FF8	B7B28	3E+A7	E5
7F082F10	B7A40	78+A7	11F
7F082E00	B7930	BC+A7	163

0xB4	2	[float - upper short only!] rotation rate override
0xB6	2	[float - upper short only!] acceleration override
0xB8	1	top speed override	0 defaults to 15, -1 sets to immovable
0xB9	1	lower sight limit override	0 defaults to -20
0xBA	1	item type when riding: 0 defaults to tank, -1 no item
0xBB	1	reserved.  used at runtime to determine if the item was already in inventory
0xBC	2	SE ignition.	0 defaults to 042
0xBE	2	SE idle.	0 defaults to ignition effect
0xC0	2	SE motion.	0 defaults to 03E
0xC2	2	SE crush.	0 defaults to 0D5

8007FF60-80 safe?
60	15.0	top speed
64	0.5	accel
68	---	RESERVED for rotation
6C	-20.0	lower sight limit
70	---	RESERVED for upper sight limit
74	---	RESERVED for future use
78	0042	SE ignition
7A	0041	SE idle
7C	003E	SE motion
7E	00D5	SE crush

7F083068:	B7B98	!NEW! set Tank override values
	sets values to 8007FF60 in rdram
	accepts: V1=p->tank object
	fries:	A0,A1,F6
//Top Speed + accel
3C048008	LUI	A0,8008
806500B8	LB	A1,00B8 (V1)
50A00001	BEQL	A1,R0,+1	;default for speed
2405000F	ADDIU	A1,R0,000F
04A20001	BLTZL	A1,+1		;negative speed = stationary!
24050000	ADDIU	A1,R0,0000
44853000	MTC1	A1,F6
946500B6	LHU	A1,00B6 (V1)	;accel FP upper halfword
468031A0	CVT.S.W	F6,F6
50A00001	BEQL	A1,R0,+1
24053F00	ADDIU	A1,R0,3F00
A485FF64	SH	A1,FF64 (A0)
E486FF60	SWC1	F6,FF60 (A0)
//lower sight limit + ignition SE
806500B9	LB	A1,00B9 (V1)
50A00001	BEQL	A1,R0,+1	;default for sight
2405FFE0	ADDIU	A1,R0,FFE0
44853000	MTC1	A1,F6
946500BC	LHU	A1,00BC (V1)
468031A0	CVT.S.W	F6,F6
50A00001	BEQL	A1,R0,+1
24050042	ADDIU	A1,R0,0042
E486FF6C	SWC1	F6,FF6C (A0)
A485FF78	SH	A1,FF78 (A0)
//idle SE	same as ignition by default
946500BE	LHU	A1,00BE (V1)
50A00001	BEQL	A1,R0,+1
9485FF78	LHU	A1,FF78 (A0)
A485FF7A	SH	A1,FF7A (A0)
//movement SE
946500C0	LHU	A1,00C0 (V1)
50A00001	BEQL	A1,R0,+1
2405003E	ADDIU	A1,R0,003E
A485FF7C	SH	A1,FF7C (A0)
//crush SE
946500C2	LHU	A1,00C2 (V1)
50A00001	BEQL	A1,R0,+1
240500D5	ADDIU	A1,R0,00D5
03E00008	JR	RA
A485FF7E	SH	A1,FF7E (A0)
00000000	NOP

dang... than still leaves rotation+ceiling.  granted, I never did find rotation...
just have to loot more space!

oh, incidentally, a passable hoverbike would be:
CC 06 CC D2